/**
 * 智慧小区管理系统 - 权限管理API
 * 
 * 权限控制粒度简化：
 * - 提供菜单权限相关接口
 * - 移除按钮权限相关接口
 * 
 * @author Wu.Liang
 * @date 2024-01-01
 * @updated 2025-01-21 - 完善权限管理接口
 */
import api from '@/api/request'

// 权限数据接口
export interface Permission {
    id: number
    permissionName: string
    permissionCode: string
    permissionType: number
    parentId?: number
    path?: string
    component?: string
    icon?: string
    sortOrder: number
    status: number
    description?: string
    createTime: string
    children?: Permission[]
}

// 权限查询参数接口
export interface PermissionQueryParams {
    current?: number
    size?: number
    keyword?: string
    type?: string
    status?: number
    parentId?: number
}

// 权限创建/更新参数接口
export interface PermissionFormData {
    permissionName: string
    permissionCode: string
    type: string
    parentId?: number | null
    path?: string
    component?: string
    icon?: string
    sortOrder: number
    status: number
    description?: string
}

// 分页结果接口
export interface PageResult<T> {
    current: number
    size: number
    total: number
    pages: number
    records: T[]
}

// 统一响应接口
export interface ApiResponse<T> {
    code: number
    message: string
    data: T
    timestamp: number
}

/**
 * 获取权限列表（分页）
 * @param params 查询参数
 * @returns 权限列表分页数据
 */
export function getPermissionList(params: PermissionQueryParams): Promise<ApiResponse<PageResult<Permission>>> {
    return api.get('/api/user/permissions', { params })
}

/**
 * 根据ID获取权限详情
 * @param id 权限ID
 * @returns 权限详情
 */
export function getPermissionById(id: number): Promise<ApiResponse<Permission>> {
    return api.get(`/api/user/permissions/${id}`)
}

/**
 * 创建权限
 * @param data 权限数据
 * @returns 创建结果
 */
export function createPermission(data: PermissionFormData): Promise<ApiResponse<any>> {
    return api.post('/api/user/permissions', data)
}

/**
 * 更新权限
 * @param id 权限ID
 * @param data 权限数据
 * @returns 更新结果
 */
export function updatePermission(id: number, data: PermissionFormData): Promise<ApiResponse<any>> {
    return api.put(`/api/user/permissions/${id}`, data)
}

/**
 * 删除权限
 * @param id 权限ID
 * @returns 删除结果
 */
export function deletePermission(id: number): Promise<ApiResponse<any>> {
    return api.delete(`/api/user/permissions/${id}`)
}

/**
 * 更新权限状态
 * @param id 权限ID
 * @param status 状态值
 * @returns 更新结果
 */
export function updatePermissionStatus(id: number, status: number): Promise<ApiResponse<any>> {
    return api.put(`/api/user/permissions/${id}/status`, null, { params: { status } })
}

/**
 * 获取权限树
 * @param status 状态过滤（可选）
 * @returns 权限树数据
 */
export function getPermissionTree(status?: number): Promise<ApiResponse<Permission[]>> {
    const params = status !== undefined ? { status } : {}
    return api.get('/api/user/permissions/tree', { params })
}

/**
 * 获取完整权限树（用于权限分配）
 * @param status 状态过滤（可选）
 * @returns 完整权限树数据
 */
export function getCompletePermissionTree(status?: number): Promise<ApiResponse<Permission[]>> {
    const params = status !== undefined ? { status } : {}
    return api.get('/api/user/permissions/complete-tree', { params })
}

/**
 * 获取用户菜单权限列表
 * @returns 菜单权限列表
 */
export function getMenuPermissions(): Promise<ApiResponse<string[]>> {
    return api.get('/api/user/permissions/menu')
}

/**
 * 获取用户菜单权限树
 * @returns 菜单权限树
 */
export function getMenuPermissionTree(): Promise<ApiResponse<Permission[]>> {
    return api.get('/api/user/permissions/menu/tree')
}

/**
 * 获取所有菜单权限列表
 * @returns 所有菜单权限列表
 */
export function getAllMenuPermissions(): Promise<ApiResponse<Permission[]>> {
    return api.get('/api/permissions/menu')
}

/**
 * 获取所有菜单权限树
 * @returns 所有菜单权限树
 */
export function getAllMenuPermissionTree(): Promise<ApiResponse<Permission[]>> {
    return api.get('/api/permissions/menu/tree')
}

/**
 * 根据菜单编码获取权限详情
 * @param menuCode 菜单编码
 * @returns 菜单权限详情
 */
export function getMenuPermissionByCode(menuCode: string): Promise<ApiResponse<Permission>> {
    return api.get(`/api/permissions/menu/${menuCode}`)
}

/**
 * 检查用户是否有指定菜单权限
 * @param menuCode 菜单编码
 * @returns 是否有权限
 */
export function checkMenuPermission(menuCode: string): Promise<ApiResponse<{ hasPermission: boolean }>> {
    return api.get(`/api/user/permissions/menu/check/${menuCode}`)
}

/**
 * 批量检查菜单权限
 * @param menuCodes 菜单编码数组
 * @returns 权限检查结果
 */
export function checkMenuPermissions(menuCodes: string[]): Promise<ApiResponse<Record<string, boolean>>> {
    return api.post('/api/user/permissions/menu/check/batch', { menuCodes })
}

/**
 * 获取用户权限
 * @param userId 用户ID
 * @returns 用户权限列表
 */
export function getUserPermissions(userId: number): Promise<ApiResponse<Permission[]>> {
    return api.get(`/api/user/permissions/user/${userId}`)
}

/**
 * 获取角色权限
 * @param roleId 角色ID
 * @returns 角色权限列表
 */
export function getRolePermissions(roleId: number): Promise<ApiResponse<Permission[]>> {
    return api.get(`/api/user/permissions/role/${roleId}`)
}

/**
 * 分配角色权限
 * @param roleId 角色ID
 * @param permissionIds 权限ID数组
 * @returns 分配结果
 */
export function assignRolePermissions(roleId: number, permissionIds: number[]): Promise<ApiResponse<any>> {
    return api.post(`/api/user/permissions/role/${roleId}`, permissionIds)
} 